今天提到的是 side effect,就像之前提到的,
side effect 通常出現在以下幾種情況
state manipulation,
interacting with the I/O
database
log system
APIs
提到 side effect 未必是不好的,譬如 setTimeOut 的使用等....
但是如果是對於一些會影響開發流程,會造成狀態、資料混亂的 side effect 則要避免,
那要避免 side effect 除了盡量避免在 function 內直接更改共享狀態,
而維持資料的 immuable,還有一個方式,就是我們之前提到的 pure function 維持
function 的 Idempotency 冪等性。
Idempotency 冪等性
我們先來看看幕等性的定義,
在編程中,一個冪等操作的特點是其任意多次執行所產生的影響都和一次執行的影響相同
function programming 中的 pure function
function 在數學意義上是冪等的
// 非冪等
const notIdempotency = (num) => {
return Math.random(num);
}
// 冪等
const idempotentency = (num) => {
console.log(num);
}
notIdempotency(3); // 雖機數字
idempotentency(3); // 每次輸入都是 3